<?php
require_once dirname(__FILE__) . '/libraries/ServiceBase.php';
/**
 * 新支付
 * 应用开通信息同步服务
 */
#@todo
class SDOServicePTB extends ServiceBase
{
    # 正式环境
	const ADD_DEPOSIT_WSDL = 'PTB_WSDL';
	# 联调环境
    const PRE_ADD_DEPOSIT_WSDL = 'PRE_PTB_WSDL';
    
    const FORBIDDEN_UPDATE_APPID_MAX = 500;
    const FORBIDDEN_APPID_RANGE_MIN = 10000;
    const FORBIDDEN_APPID_RANGE_MAX = 29999;
    # 默认附加信息
    const APPENDIX_DEFAULT = "OPENIII";
    # 默认开始日期
    const BEGINDATE_DEFAULT = "1970-01-01 07:00:00";
    # 默认结束日期
    const ENDDATE_DEFAULT = "1970-01-01 07:00:00";
    # 授权帐号分隔符
    const AUTHORIZEDUSERS_GLUE = "^|^";
    # 帐号字符串长度
    const AUTHORIZEDUSERS_MAX_LENGTH = 4000;
    # 划账最大节点
    const TRANSFER_MAX_POINT = 15000;
    # 划账最小节点
    const TRANSFER_MIN_POINT = 1;
    # 关闭状态
    const APP_STATUS_CLOSE = 0;
    # 测试状态
    const APP_STATUS_TEST = 1;
    # 上线状态
    const APP_STATUS_ONLINE = 2;
    protected static $warnNo = array(
    	0 => "成功",
        1001=> "参数错误 ",
        -10146101=> "参数错误 ",
        -10146111=> "参数错误 ",
        -10146301=> "参数错误 ",
        -10146305=> "统一编码读取出错sp 节点不存在 ",
        -10146306=> "Appid和Spid不匹配 ",
        -10146307=> "统一编码读取出错service 节点不存在 ",
        -10146308=> "统一编码读取出错area 节点不存在 ",
        -10146801=> "游戏区服没有配置 ",
        -101468011=> "游戏区服没有配置 ",
        -10146815=> "线性汇率错误 ",
        -101468151=> "线性汇率错误 ",
        -10146816=> "银行卡线性汇率配置错误 ",
        -101468161=> "银行卡线性汇率配置错误 ",
        -10146820=> "@Operation,@appStatus参数冲突 ",
        2001=> "参数错误 "
    ); 
    /**
     * 
     * 开通道具计费服务
     * @param string $message
     * @param array $params array(
     * 	'spId'=>商户ID, 
     *  'appId'=>应用ID, 
     *  'appIndex'=>用于搜索支付应用的索引,
     *  'appTag'=>所属用于显示分类的标签, 
     *  'businessType'=>操作的业务类型（0 普通卡和绿卡 1  仅普通卡  2 绿卡，默认1）, 
     *  'operationId'=>由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     *  beginDate=>开通时间，目前只对绿卡有效格式 YYYY-MM-DD hh(24):mm:ss,
     *  endDate=>结束时间，目前只对绿卡有效格式 YYYY-MM-DD hh(24):mm:ss,
     *  authorizedUsers=>授权用户列表，可以通过IGW访问处于开发状态的应用,
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function OpenPTBDeposit(&$message, $params, $env=SDK_ENV_TEST)
    {        
        $need = array(
            'spId', 
            'appId', 
            'appIndex', 
            'appTag', 
            'businessType',
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if (! self::validAppid($message, $params['appId'], 1)) {
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        if (!isset($params['beginDate'])) {
        	$params['beginDate'] = self::BEGINDATE_DEFAULT;
        }
        if (!isset($params['endDate'])) {
        	$params['endDate'] = self::ENDDATE_DEFAULT;
        }
        if (!isset($params['authorizedUsers'])) {
        	$params['authorizedUsers'] = '';
        } else {
            $params['authorizedUsers'] = join(self::AUTHORIZEDUSERS_GLUE, $params['authorizedUsers']);
        	if (!self::validAuthUserLength($params['authorizedUsers'])) {
            	return false;
            }
        }
        $op = "OpenPTBDeposit";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'OpenPTBDepositResult', $message, $errMsg);
    }
    /**
     * 
     * 开通点券划账服务
     * @param string $message
     * @param array $params array(
     * 	'spId'=>商户ID, 
     *  'appId'=>应用ID, 
     *  'appIndex'=>用于搜索支付应用的索引, 逗号分割的字符串,默认为首字母和应用名称,
     *  'appTag'=>所属用于显示分类的标签, 属于多个标签用逗号分割, 默认根据应用的首字母来划分分类, 
     *  CurrencyName =>游戏货币名称, 
     *  CurrencyUnit =>货币单位,
     *  isLineRate =>是否线性汇率，即1元能兑换多少整数个游戏币, 1，线性  0 非线性,
     *  maxPoint => 最大充值节点,默认15000,
     *  minPoint => 划账支持的最小节点，单位元,
     *  showAreaServer => 是否显示区组, 0不显示，1显示区，2显示服, 默认为2,
     *  pointList => 划账支持的节点列表，格式： 金额|对应游戏币数量#金额|
     *  对应游戏币数量IsLineRate=1时，表示汇率,字符，长度小于等于600,
     *  operationId =>由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     *  beginDate=>开通时间，目前只对绿卡有效格式 YYYY-MM-DD hh(24):mm:ss,
     *  endDate=>结束时间，目前只对绿卡有效格式 YYYY-MM-DD hh(24):mm:ss,
     *  authorizedUsers=>授权用户列表，可以通过IGW访问处于开发状态的应用,
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function OpenPTBPayment(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId',
        	'appIndex', 
            'appTag', 
            'CurrencyName', 
            'CurrencyUnit', 
            'isLineRate', 
            'pointList', 
        	'showAreaServer'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if (! self::validAppid($message, $params['appId'], 0)) {
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        if (!isset($params['maxPoint'])) {
        	$params['maxPoint'] = self::TRANSFER_MAX_POINT;
        }
        if (!isset($params['minPoint'])) {
        	$params['minPoint'] = self::TRANSFER_MIN_POINT;
        }
        if (!isset($params['beginDate'])) {
        	$params['beginDate'] = self::BEGINDATE_DEFAULT;
        }
        if (!isset($params['endDate'])) {
        	$params['endDate'] = self::ENDDATE_DEFAULT;
        }
        if (!isset($params['authorizedUsers'])) {
        	$params['authorizedUsers'] = '';
        } else {
            $params['authorizedUsers'] = join(self::AUTHORIZEDUSERS_GLUE, $params['authorizedUsers']);
            if (!self::validAuthUserLength($params['authorizedUsers'])) {
            	return false;
            }
        }
        $op = "OpenPTBPayment";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        if ($result === false) {
            $errMsg[SDK_LOG_EXCEPTION] = $message;
            
            self::fatal($errMsg, __CLASS__);
            return false;
        }
        $errMsg[SDK_LOG_REUTRN] = json_encode($result);
        if ($result->OpenPTBPaymentResult->Error_Code !== "0") {
        	self::setErrNo($result->OpenPTBPaymentResult->Error_Code);
            $logLevel = isset($result->OpenPTBPaymentResult->Error_Code) && isset(
            self::$warnNo[$result->OpenPTBPaymentResult->Error_Code]) ? 'warn' : 'error';
            
            self::$logLevel($errMsg, __CLASS__);
            return false;
        }
        self::log($errMsg, __CLASS__, true);
        return true;
    }
    /**
     * 更新应用基本信息
     * 用于修改应用的基本信息，包括应用名称、索引、区服信息等。
     * @param string $message
     * @param array $params array(
     * 	spId =>商户ID, 
     *  appId =>应用ID, 
     *  appIndex =>用于搜索支付应用的索引,
     *  appTag =>所属用于显示分类的标签, 
     *  operationId =>由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     *  operationType => 操作类型, 0 更新区服和应用基本信息  1只更新区服2 更新应用基本信息，包括名称、索引、标签，不更新区服
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function UpdateAppInfo(&$message, $params,$env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId',
        	'appIndex', 
            'appTag', 
            'operationType'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if (! self::validAppid($message, $params['appId'], 0)) {
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "UpdateAppInfo";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'UpdateAppInfoResult', $message, $errMsg);
    }
    /**
     * 
     * 更新应用支付信息
     * 更新支付信息，包括汇率，货币名称，货币单位，充值是否分区等
     * @param string $message
     * @param array $params array(
     * 	spId =>商户ID, 
     *  appId =>应用ID, 
     *  appIndex =>用于搜索支付应用的索引, 逗号分割的字符串,默认为首字母和应用名称,
     *  appTag =>所属用于显示分类的标签, 属于多个标签用逗号分割, 默认根据应用的首字母来划分分类, 
     *  CurrencyName =>游戏货币名称, 
     *  CurrencyUnit =>货币单位,
     *  isLineRate => 是否线性汇率，即1元能兑换多少整数个游戏币, 1，线性  0 非线性,
     *  maxPoint => 最大充值节点,默认15000,
     *  minPoint => 划账支持的最小节点，单位元,
     *  pointList => 划账支持的节点列表，格式： 金额|对应游戏币数量#金额|
     *  对应游戏币数量IsLineRate=1时，表示汇率,字符，长度小于等于600,
     *  showAreaServer => 是否显示区组, 0不显示，1显示区，2显示服, 默认为2,
     *  operationId =>由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function UpdateAppPaymentInfo(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId',
        	'CurrencyName', 
            'CurrencyUnit', 
            'isLineRate', 
            'pointList', 
        	'showAreaServer'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if (! self::validAppid($message, $params['appId'], 0)) {
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        if (!isset($params['maxPoint'])) {
        	$params['maxPoint'] = self::TRANSFER_MAX_POINT;
        }
        if (!isset($params['minPoint'])) {
        	$params['minPoint'] = self::TRANSFER_MIN_POINT;
        }
        $op = "UpdateAppPaymentInfo";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        if ($result === false) {
            $errMsg[SDK_LOG_EXCEPTION] = $message;
            
            self::fatal($errMsg, __CLASS__);
            return false;
        }
        $errMsg[SDK_LOG_REUTRN] = json_encode($result);
        if ($result->UpdateAppPaymentInfoResult->Error_Code !== "0") {
        	self::setErrNo($result->UpdateAppPaymentInfoResult->Error_Code);
            $logLevel = isset($result->UpdateAppPaymentInfoResult->Error_Code) && isset(
            self::$warnNo[$result->UpdateAppPaymentInfoResult->Error_Code]) ? 'warn' : 'error';
            
            self::$logLevel($errMsg, __CLASS__);
            return false;
        }
        self::log($errMsg, __CLASS__, true);
        return true;
    }
    /**
     * 
     * 应用上线
     * 正式开通或恢复应用支付服务，对所有玩家开放，开放PAY、IGW、易售、直充系统的支付业务
     * @param string $message
     * @param array $params array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果
     * )
     * @param unknown_type $env
     */
    public function OpenApp(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "OpenApp";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'OpenAppResult', $message, $errMsg);
    }
    /**
     * 
     * 暂停应用
     * 暂停应用支付服务，停止各系统该应用的支付业务，该操作可用开通服务OpenApp重新开通。
     * @param string $message
     * @param array $params array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function SuspendApp(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "SuspendApp";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'SuspendAppResult', $message, $errMsg);
    }
    /**
     * 
     * 关闭应用
     * 停止应用支付服务，停止各系统该应用的支付业务，并不可恢复。
     * @param string $message
     * @param array $params array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function CloseApp(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "CloseApp";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        if(!self::processData($result, 'CloseAppResult', $message, $errMsg)){
        	if(self::getErrNo()==="0") {
        		return true;
        	}
        	return false;
        }
        return true;
    }
    /**
     * 
     * 同步授权帐号
     * @param string $message
     * @param array $params array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     *  authorizedUsers => 授权用户列表，可以通过IGW访问处于开发状态的应用, 以^|^分割的字符串，长度小于4000字符。
     * )
     * @param string $env
     * 
     * @return boolean
     */
    public function AuthorizeUsers(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId',
            'authorizedUsers'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $params['authorizedUsers'] = join(self::AUTHORIZEDUSERS_GLUE, $params['authorizedUsers']);
    	if (!self::validAuthUserLength($params['authorizedUsers'])) {
        	return false;
        }
        $op = "AuthorizeUsers";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'AuthorizeUsersResult', $message, $errMsg);
    }
    /**
     * 
     * 查看当前应用配置
     * 查看应用的当前配置信息，和开通相关的
     * @param string $message array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     *  )
     * @param array $params 
     * @param unknown_type $env
     */
    public function GetAppPaymentInfo(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "GetAppPaymentInfo";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'GetAppPaymentInfo' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        $return = self::processData($result, 'GetAppPaymentInfoResult', $message, $errMsg);
        if ($return) {
        	return (array)json_decode($result->GetAppPaymentInfoResult->Result);
        }
        return $return;
    }
    /**
     * 调试应用（转为待运营）
     * 将应用从运营状态转为待运营状态，也可以从暂停状态转为待运营
     * @param $message
     * @param $params array(
     * 	spId => 商户ID,
     *  appId => 应用ID,
     *  operationId => 由调用方自动生成的唯一操作流水号，用于追踪当前操作的反馈结果,
     * )
     * @param $env
     */
    public function DebugApp(&$message, $params, $env=SDK_ENV_TEST)
    {
        $need = array(
            'spId', 
            'appId', 
            'operationId'
        );
        if (! self::_validateParam($params, $need, $message)) {
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if(!isset($params['appendix'])) {
            $params['appendix'] = self::APPENDIX_DEFAULT;            
        }
        $op = "DebugApp";
        $wsdl = ($env === SDK_ENV_TEST) ? sdk_fetch_config(
        SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL) : sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL);
        $option = array();
        /*$param = array(
            'req' => $params
        );*/
        $param = $params;
        $result = self::soapRequest($op, $param, $wsdl, $option, $message);
        $errMsg = array(SDK_LOG_METHOD=> __FUNCTION__ , SDK_LOG_PARAMS=> json_encode($param) , SDK_LOG_ENV=>$env, SDK_LOG_LOCATION=>$wsdl);
        return self::processData($result, 'DebugAppResult', $message, $errMsg);
    }
    /**
     * 
     * @param string $message 错误信息
     * @param int $appid
     * @param int 0 关闭，1开通
     */
    private static function validAppid (&$message, $appId, $op = 0)
    {
        if ($appId >= self::FORBIDDEN_APPID_RANGE_MIN && $appId <= self::FORBIDDEN_APPID_RANGE_MAX) {
            $message = "ID编号在10000-29999之间的，禁止开通支付服务。";
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        if (! $op && $appId <= self::FORBIDDEN_UPDATE_APPID_MAX) {
            $message = "ID编号在1-500之间的，不被允许修改支付服务。";
            self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
            return false;
        }
        return true;
    }
    /**
     * 自检函数
     */
    public static function selfTest ()
    {
        $arr = array(
            sdk_fetch_config(SDK_ENV . self::ADD_DEPOSIT_WSDL), 
            sdk_fetch_config(SDK_ENV . self::PRE_ADD_DEPOSIT_WSDL)
        );
        return self::curlTest($arr);
    }
    
    private static function processData(&$result, $property, &$message, &$errMsg)
    {
        if ($result === false) {
            $errMsg[SDK_LOG_EXCEPTION] = $message;
            self::fatal($errMsg, __CLASS__);
            return false;
        }
        $errMsg[SDK_LOG_REUTRN] = json_encode($result);
        if ($result->$property->Status !== 0) {
        	self::setErrNo($result->$property->Error_Code);
            $logLevel = isset($result->$property->Error_Code) && isset(
            self::$warnNo[$result->$property->Error_Code]) ? 'warn' : 'error';
            $message = $result->$property->Error_Message;
            self::$logLevel($errMsg, __CLASS__);
            return false;
        }
        self::log($errMsg, __CLASS__, true);
        return true;
    }
    /**
     * 
     * 验证授权帐号长度
     * @param string $users
     * @return boolean
     */
    private static function validAuthUserLength($users)
    {
    	if (strlen($users) > self::AUTHORIZEDUSERS_MAX_LENGTH) {
	        $message = "User data too large.";
	        self::setErrNo(SDOServiceErrorCode::API_EC_PARAM);
	        return false;
        }
        return true;
    }
}